home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-02
/
vdl020d.zip
/
VSAL.DOC
< prev
next >
Wrap
Text File
|
1993-04-14
|
14KB
|
631 lines
{
════════════════════════════════════════════════════════════════════════════
Visionix SCSI Abstraction Library (VSAL)
Copyright 1991,92,93 Visionix
ALL RIGHTS RESERVED
────────────────────────────────────────────────────────────────────────────
Revision history in reverse chronological order:
Initials Date Comment
──────── ──────── ────────────────────────────────────────────────────────
lpg 03/16/93 Added Source Documentation
mep 02/11/93 Cleaned up code for beta release
jrt 02/08/93 Sync with beta 0.12 release
jrt 11/21/92 Sync with beta 0.0.8
jrt 09/01/92 First logged revision.
════════════════════════════════════════════════════════════════════════════
}
Unit VSAL;
Uses
DOS,
VTypes,
VGen,
ASPILow,
HM;
{────────────────────────────────────────────────────────────────────────────}
Const
cSalMethodHACMAN = 1;
cSalMethodASPI = 2;
cSalMethodSDLP = 3;
cSalMethodCAM = 4;
CSalMethodINT4B = 5;
cSalMethodSySUI = 14;
cSalGetPaddedName = 1;
cSalDevNameIncType = 1;
cSalDevNameIncInq = 2;
cSalDevNameIncAll = 3;
sSalDone = $0000;
sSalGenFail = $FFFF;
(*
0 ----- 0=NO I/O; 1=read, 2=write, 3=Target driven
1 ---/
2
3
4
5
6
7
8
9
10
11
12
13
14
15
*)
cSalxsNoIO = $0000;
cSalxsRead = $0001;
cSalxsWrite = $0002;
cSalxsTDIO = $0003;
sSalxsOK = $0100;
sSalxsCheckDev = $0200;
sSalxsBadIODir = $0300;
sSalxsBadIOtmd = $0400;
sSalxsBadIOhmd = $0500;
sSalxsBadIOtld = $0600;
sSalxsBadIOhld = $0700;
sSalxsGenFail = $FF00;
Type
TCDB = Array[1..16] of BYTE;
TError = WORD;
TBusMapEntry = RECORD
Method : BYTE;
MainBus : BYTE;
SubBus : BYTE;
END;
TSalInstance = RECORD
Method : WORD;
NumBus : BYTE;
BusMap : Array[0..15] of TBusMapEntry;
END;
PSalInstance = ^TSalInstance;
TSalHandle = PSalInstance;
{------------------}
{ SAl General Caps }
{------------------}
TSalCaps = RECORD
a : BYTE;
END;
PSalCaps = ^TSalCaps;
{------------------------}
{ Method specific caps }
{------------------------}
TSalMethodCaps = RECORD
b : BYTE;
END;
PSalMethodCaps = ^TSalMethodCaps;
{────────────────────────────────────────────────────────────────────────────}
{----------------------}
{ Init and informative }
{----------------------}
Procedure SAL_GetCaps( SalCaps : PSalCaps );
Function SAL_CheckForMethod( Method : BYTE ) : BOOLEAN;
Function SAL_Open( Flags : BYTE;
MethodListStr : STRING ) :TSalHandle;
Procedure SAL_Close( Handle : TSalHandle );
Procedure SAL_GetMethodCaps( Handle : TSalHandle;
SalMethodCaps : PSalMethodCaps );
Function SAL_GetNumBus( Handle : TSalHandle ) :BYTE;
{--------------------}
{ SAL ASCII Name Get }
{--------------------}
Function SAL_GetMethodName( Handle : TSalHandle;
Flags : WORD ):ST80;
Function SAL_GetBusName( Handle : TSalHandle;
Flags : WORD;
Bus : BYTE ) :ST80;
Function SAL_GetDevName( Handle : TSalHandle;
Flags : WORD;
Bus : BYTE;
Target : BYTE;
Lun : BYTE ) :ST80;
{--------------}
{ SAL SCSI I/O }
{--------------}
Function SAL_ExecSCSI( Handle : TSalHandle;
Flags : WORD;
Bus : BYTE;
Target : BYTE;
Lun : BYTE;
CDBSize : BYTE;
CDB : PCDB;
IOSize : LONGINT;
IOBuff : POINTER;
ReqSenSize : LONGINT;
ReqSenBuff : POINTER ) :TError;
(*
Function SAL_PostSCSI( Handle : TSalHandle;
Flags : WORD;
Bus : BYTE;
Target : BYTE;
Lun : BYTE;
CDBSize : BYTE;
CDB : PCDB;
IOSize : LONGINT;
IOBuff : POINTER;
ReqSenSize : LONGINT;
ReqSenBuff : POINTER;
PostProc : POINTER ) :TError;
*)
Function SAL_ResetSCSIBus( Handle : TSalHandle;
Flags : WORD;
Bus : BYTE ) :TError;
Function SAL_ResetSCSIDev( Handle : TSalHandle;
Flags : WORD;
Bus : BYTE ) :TError;
{-----------------}
{ SAL CDB Loading }
{-----------------}
Procedure SAL_CDB6Load( CDB : PCDB;
b1 : BYTE;
b2 : BYTE;
b3 : BYTE;
b4 : BYTE;
b5 : BYTE;
b6 : BYTE );
Procedure SAL_CDB10Load( CDB : PCDB;
b1 : BYTE;
b2 : BYTE;
b3 : BYTE;
b4 : BYTE;
b5 : BYTE;
b6 : BYTE;
b7 : BYTE;
b8 : BYTE;
b9 : BYTE;
b10 : BYTE );
{────────────────────────────────────────────────────────────────────────────}
──────────────────────────────────────────────────────────────────────────────
[FUNCTION]
Procedure SAL_GetCaps( SalCaps : PSalCaps );
[PARAMETERS]
SalCaps Pointer to ?
[RETURNS]
(None)
[DESCRIPTION]
[SEE-ALSO]
[EXAMPLE]
──────────────────────────────────────────────────────────────────────────────
[FUNCTION]
Function SAL_CheckForMethod( Method : BYTE ) : BOOLEAN;
[PARAMETERS]
Method ?
[RETURNS]
Whether the Method was ...
[DESCRIPTION]
[SEE-ALSO]
[EXAMPLE]
──────────────────────────────────────────────────────────────────────────────
[FUNCTION]
Function SAL_Open( Flags : BYTE;
MethodListStr : STRING ) :TSalHandle;
[PARAMETERS]
Flags ?
MethodListStr ?
[RETURNS]
[DESCRIPTION]
[SEE-ALSO]
[EXAMPLE]
──────────────────────────────────────────────────────────────────────────────
[FUNCTION]
Procedure SAL_Close( Handle : TSalHandle );
[PARAMETERS]
Handle ?
[RETURNS]
(None)
[DESCRIPTION]
[SEE-ALSO]
[EXAMPLE]
──────────────────────────────────────────────────────────────────────────────
[FUNCTION]
Procedure SAL_GetMethodCaps( Handle : TSalHandle;
SalMethodCaps : PSalMethodCaps );
[PARAMETERS]
Handle ?
SalMethodCaps Pointer to ?
[RETURNS]
(None)
[DESCRIPTION]
[SEE-ALSO]
[EXAMPLE]
──────────────────────────────────────────────────────────────────────────────
[FUNCTION]
Function SAL_GetNumBus( Handle : TSalHandle ) :BYTE;
[PARAMETERS]
Handle ?
[RETURNS]
[DESCRIPTION]
[SEE-ALSO]
[EXAMPLE]
──────────────────────────────────────────────────────────────────────────────
[FUNCTION]
Function SAL_GetMethodName( Handle : TSalHandle;
Flags : WORD ):ST80;
[PARAMETERS]
Handle ?
Flags ?
[RETURNS]
[DESCRIPTION]
[SEE-ALSO]
[EXAMPLE]
──────────────────────────────────────────────────────────────────────────────
[FUNCTION]
Function SAL_GetBusName( Handle : TSalHandle;
Flags : WORD;
Bus : BYTE ) :ST80;
[PARAMETERS]
Handle ?
Flags ?
Bus ?
[RETURNS]
[DESCRIPTION]
[SEE-ALSO]
[EXAMPLE]
──────────────────────────────────────────────────────────────────────────────
[FUNCTION]
Function SAL_GetDevName( Handle : TSalHandle;
Flags : WORD;
Bus : BYTE;
Target : BYTE;
Lun : BYTE ) :ST80;
[PARAMETERS]
Handle ?
Flags ?
Bus ?
Target ?
Lun ?
[RETURNS]
[DESCRIPTION]
[SEE-ALSO]
[EXAMPLE]
──────────────────────────────────────────────────────────────────────────────
[FUNCTION]
Function SAL_ExecSCSI( Handle : TSalHandle;
Flags : WORD;
Bus : BYTE;
Target : BYTE;
Lun : BYTE;
CDBSize : BYTE;
CDB : PCDB;
IOSize : LONGINT;
IOBuff : POINTER;
ReqSenSize : LONGINT;
ReqSenBuff : POINTER ) :TError;
[PARAMETERS]
Handle ?
Flags ?
Bus Device Host Adapter Number
Target Device Target ID
Lun Device Logical Unit Number
CDBSize Number of Bytes in CDB
CDB Pointer to CDB Data
IOSize Number of Bytes to IO
IOBuff Pointer to IO Data Buffer
ReqSenSize Size of Request Sense Buffer
ReqSenBuff Pointer to Request Sense Buffer
[RETURNS]
[DESCRIPTION]
[SEE-ALSO]
[EXAMPLE]
──────────────────────────────────────────────────────────────────────────────
[FUNCTION]
Function SAL_ResetSCSIBus( Handle : TSalHandle;
Flags : WORD;
Bus : BYTE ) :TError;
[PARAMETERS]
Handle ?
Flags ?
Bus ?
[RETURNS]
[DESCRIPTION]
[SEE-ALSO]
[EXAMPLE]
──────────────────────────────────────────────────────────────────────────────
[FUNCTION]
Function SAL_ResetSCSIDev( Handle : TSalHandle;
Flags : WORD;
Bus : BYTE ) :TError;
[PARAMETERS]
Handle ?
Flags ?
Bug ?
[RETURNS]
[DESCRIPTION]
[SEE-ALSO]
[EXAMPLE]
──────────────────────────────────────────────────────────────────────────────
[FUNCTION]
Procedure SAL_CDB6Load( CDB : PCDB;
b1 : BYTE;
b2 : BYTE;
b3 : BYTE;
b4 : BYTE;
b5 : BYTE;
b6 : BYTE );
[PARAMETERS]
CDB Pointer to CDB Array
b1 1st CDB Byte
b2 2nd CDB Byte
b3 3rd CDB Byte
b4 4th CDB Byte
b5 5th CDB Byte
b6 6th CDB Byte
[RETURNS]
(None)
[DESCRIPTION]
Loads the CDB with the Parameter Bytes.
[SEE-ALSO]
SAL_CDB10Load
[EXAMPLE]
──────────────────────────────────────────────────────────────────────────────
[FUNCTION]
Procedure SAL_CDB10Load( CDB : PCDB;
b1 : BYTE;
b2 : BYTE;
b3 : BYTE;
b4 : BYTE;
b5 : BYTE;
b6 : BYTE;
b7 : BYTE;
b8 : BYTE;
b9 : BYTE;
b10 : BYTE );
[PARAMETERS]
CDB Pointer to CDB Array
b1 1st CDB Byte
b2 2nd CDB Byte
b3 3rd CDB Byte
b4 4th CDB Byte
b5 5th CDB Byte
b6 6th CDB Byte
b7 7th CDB Byte
b8 8th CDB Byte
b9 9th CDB Byte
b10 10th CDB Byte
[RETURNS]
(None)
[DESCRIPTION]
Loads the CDB with the Parameter Bytes.
[SEE-ALSO]
SAL_CDB6Load
[EXAMPLE]